package com.zliblike_platform.mapper;

import com.zliblike_platform.entity.Comment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 评论Mapper接口
 */
@Mapper
public interface CommentMapper {
    
    /**
     * 新增评论
     * @param comment 评论信息
     * @return 影响行数
     */
    int insert(Comment comment);
    
    /**
     * 更新评论
     * @param comment 评论信息
     * @return 影响行数
     */
    int update(Comment comment);
    
    /**
     * this.querySelector('i').归类的删除评论
     * @param commentId 评论ID
     * @return 影响行数
     */
    int deleteById(@Param("commentId") Long commentId);
    
    /**
     * 根据ID查询评论
     * @param commentId 评论ID
     * @return 评论信息
     */
    Comment selectById(@Param("commentId") Long commentId);
    
    /**
     * 根据书籍ID查询评论（父评论）
     * @param bookId 书籍ID
     * @param offset 起始位置
     * @param limit 查询条数
     * @return 评论列表
     */
    List<Comment> selectByBookId(@Param("bookId") Long bookId, @Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 根据书单ID查询评论（父评论）
     * @param listId 书单ID
     * @param offset 起始位置
     * @param limit 查询条数
     * @return 评论列表
     */
    List<Comment> selectByListId(@Param("listId") Long listId, @Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 根据父评论ID查询回复列表
     * @param parentCommentId 父评论ID
     * @return 回复列表
     */
    List<Comment> selectReplies(@Param("parentCommentId") Long parentCommentId);
    
    /**
     * 增加评论点赞数
     * @param commentId 评论ID
     * @return 影响行数
     */
    int incrementLikes(@Param("commentId") Long commentId);
    
    /**
     * 减少评论点赞数
     * @param commentId 评论ID
     * @return 影响行数
     */
    int decrementLikes(@Param("commentId") Long commentId);
    
    /**
     * 统计书籍评论数量
     * @param bookId 书籍ID
     * @return 评论数量
     */
    int countByBookId(@Param("bookId") Long bookId);
    
    /**
     * 统计书单评论数量
     * @param listId 书单ID
     * @return 评论数量
     */
    int countByListId(@Param("listId") Long listId);
} 